package com.spa.infrastructure.service.storage.impl;

import com.qiniu.util.Auth;
import com.spa.infrastructure.service.storage.FileStorageService;
import com.spa.infrastructure.service.storage.StorageType;
import com.spa.infrastructure.service.storage.impl.qiniu.QiNiuConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * https://developer.qiniu.com/kodo/1205/programming-model
 * 保护数据安全和考虑架构合理性
 * 注意：
 * 因为时间戳的创建和验证在不同的服务端进行（在业务服务器创建，在云存储服务器验证），因此开发者的业务服务器需要尽可能校准时间，否则可能出现凭证刚创建就过期等各种奇怪的问题。
 */
@Service
public class QiNiuStorageServiceImpl implements FileStorageService {

    @Autowired
    private Auth auth;

    @Autowired
    private QiNiuConfig qiNiuConfig;

    @Override
    public String getUrl(String key) {
        return auth.privateDownloadUrl(qiNiuConfig.getDomain() + key);
    }

    @Override
    public String getUploadToken() {
        return auth.uploadToken(qiNiuConfig.getBucket());
    }

    @Override
    public StorageType type() {
        return StorageType.QINIUYUN;
    }

}
